#include "database.h"

//获取单例实例
Database& Database::getInstance() {
    //使用静态局部变量确保只创建一个实例
    static Database instance;
    return instance;
}

//私有构造函数，初始化数据库连接
Database::Database() {
    // 添加 SQLite 数据库驱动
    db = QSqlDatabase::addDatabase("QSQLITE");

    // 设置数据库文件名
    db.setDatabaseName("rosetmac.db");

    // 创建数据库连接
    if (!createConnection()) {
        qDebug() << "Failed to connect database!";
    }
}


//析构函数，关闭数据库连接
Database::~Database() {
    if (db.isOpen()) {
        db.close();
    }
}


//创建数据库连接并创建数据表
bool Database::createConnection() {

    //打开数据库
    if (!db.open()) {
        qDebug() << "Failed to connect database!";
        return false;
    }

    //创建 SQL 查询对象
    QSqlQuery query;

    //创建 userInfo 数据表，如果不存在的话，包含 id（主键自增）、userName 和 password 字段
    bool ret = query.exec("CREATE TABLE IF NOT EXISTS userInfo "
                          "(id INTEGER PRIMARY KEY AUTOINCREMENT, "
                          "userName TEXT, password TEXT)");
    if (!ret) {
        qDebug() << "Failed to create userInfo table: " << query.lastError().text();
    }
    return true;
}

//向 userInfo 数据表中插入用户名和密码
void Database::insertUserInfoData(const QString& userName, const QString& password) {

    // 创建 SQL 查询对象
    QSqlQuery query;

    // 构建插入数据的 SQL 语句，将用户名和密码插入到 userInfo 表中
    QString sql = QString("INSERT INTO userInfo (userName, password) "
                          "VALUES ('%1', '%2')").arg(userName).arg(password);
    // 执行 SQL 语句
    bool ret = query.exec(sql);
    if (!ret) {
        qDebug() << "Failed to insert userInfo data: " << query.lastError().text();
    }
}


// 根据 id 更新 userInfo 数据表中的用户名和密码
void Database::updateUserInfoData(int id, const QString& userName, const QString& password) {

    // 创建 SQL 查询对象
    QSqlQuery query;

    // 构建更新数据的 SQL 语句，根据 id 更新用户名和密码
    QString sql = QString("UPDATE userInfo SET userName='%1', password='%2' "
                          "WHERE id=%3").arg(userName).arg(password).arg(id);
    // 执行 SQL 语句
    bool ret = query.exec(sql);
    if (!ret) {
        qDebug() << "Failed to update userInfo data: " << query.lastError().text();
    }
}


// 根据 id 删除 userInfo 数据表中的数据
void Database::deleteUserInfoData(int id) {

    // 创建 SQL 查询对象
    QSqlQuery query;

    // 构建删除数据的 SQL 语句，根据 id 删除记录
    QString sql = QString("DELETE FROM userInfo WHERE id=%1").arg(id);

    // 执行 SQL 语句
    bool ret = query.exec(sql);
    if (!ret) {
        qDebug() << "Failed to delete userInfo data: " << query.lastError().text();
    }
}


// 查询 userInfo 数据表中的所有数据并输出
void Database::queryUserInfoData() {

    // 创建 SQL 查询对象，执行查询语句，获取 userInfo 表中的所有记录
    QSqlQuery query("SELECT * FROM userInfo");

    // 遍历查询结果
    while (query.next()) {

        // 获取 id 字段的值
        int id = query.value(0).toInt();

        // 获取 userName 字段的值
        QString userName = query.value(1).toString();

        // 获取 password 字段的值
        QString password = query.value(2).toString();

        // 输出查询结果
        qDebug() << "Id:" << id << "UserName:" << userName << "Password:" << password;
    }
}
